package com.schoolai.generator;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.model.ClassAnnotationAttributes;

/**
 * Copyright(C),2019-2025，XX公司
 * FileName:CodeGenerator
 * Author:bobby
 * 创建时间：2025/9/23 15:03
 * Description:代码生成器
 * History:
 * <auth>        <time>       <version>       <desc>
 * 作者          修改时间       版本号         描述
 */

public class CodeGenerator {
    public static void main(String[] args) {
        //String url="jdbc:mysql://192.168.0.11:3306/school-study?serverTimezone=UTC";
        String url="jdbc:mysql://192.168.0.11:3306/school-set?serverTimezone=UTC";
        String username="root";
        String password="cmccgyrt";
        String tables="tbl_school_set_sms_log";   // 多表，可用逗号分隔
        FastAutoGenerator.create(url, username, password)
                .globalConfig(builder -> {
                    builder.author("bobby")    // 设置作者
                            .enableSpringdoc()  // 开启 swagger 模式
                            .disableOpenDir()   // 禁止打开输出目录，默认false
                            //.outputDir("D:\\work\\school-ai\\school-study\\src\\main\\java"); // 指定输出目录
                            .outputDir("D:\\work\\school-ai\\school-set\\src\\main\\java"); // 指定输出目录

                })
                .packageConfig(builder -> {
                    //builder.parent("com.schoolai.schoolstudy")     // 父包名
                    builder.parent("com.schoolai.schoolset")
                            .entity("entity")            // 实体类包名
                            .controller("controller")    // controller 包名
                            .service("service")          // service 包名
                            .serviceImpl("service.impl") // service.impl 包名
                            .mapper("mapper");           // mapper 包名
                })
                .strategyConfig(builder -> {
                    builder.addInclude(tables)                // 设置需要生成的表名
                            .entityBuilder()                  // entity
                            .formatFileName("%s")             // 格式化实体名称，%s取消首字母I
                            .idType(IdType.ASSIGN_UUID)
                            .enableLombok(new ClassAnnotationAttributes("@Data","lombok.Data")) // @Data
                            //.addTableFills(new Column("create_id", FieldFill.INSERT))       // 自动填充注解
                            //.addTableFills(new Column("create_time", FieldFill.INSERT))     // 自动填充注解
                            //.addTableFills(new Column("ts", FieldFill.INSERT_UPDATE))       // 自动填充注解
                           // .logicDeleteColumnName("delete_flag")   // 逻辑删除注解
                            .enableFileOverride()                   // 覆盖已生成文件

                            .controllerBuilder()              // controller
                            .enableRestStyle()                // @RestController
                            .enableFileOverride()             // 覆盖已生成文件

                            .serviceBuilder()                   // service
                            .formatServiceFileName("%sService".replace("Tbl","")) // 格式化实体名称，%s取消首字母I
                            .enableFileOverride()               // 覆盖已生成文件

                            .formatServiceImplFileName("%sServiceImpl".replace("Tbl","")) // serviceImpl,格式化实体名称，%s取消首字母I
                            .enableFileOverride()                       // 覆盖已生成文件

                            .mapperBuilder()                  // mapper
                            .formatMapperFileName("%sMapper".replace("Tbl","")) // 格式化实体名称，%s取消首字母I
                            .enableMapperAnnotation()         // @Mapper
                            .enableFileOverride();            // 覆盖已生成文件;
                })
                .templateEngine(new FreemarkerTemplateEngine())     // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();


    }
}
